// 题意：给定一个n个点m条边的图，不一定联通。现在每次可以等可能性的给
//       两个不同的点连上一条边（已经有边也可以），问最后图联通的期望。
//
// 题解：其实这题只要关心每个联通块的点的个数就行，所以就可以以联通块
//       以及对应点的个数来dp。
//       例如样例的 E(2, 2) = (4/6)*(E(4) + 1) + (2/6)*(E(2, 2) + 1)，
//       然后把式子右边当前状态移到左边，就可以算出当前状态了。
//       这题可以用map来做hash，因为有vector的operator <，只要给每个状态排序就行。
//
// run: $exec < input
// opt: 0
// flag: -g
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <map>

int const maxn = 33;
bool vis[maxn];
int n, m;

std::map<std::vector<int>, double> f;
std::vector<int> graph[maxn];

void add_edge(int u, int v)
{
	graph[u].push_back(v); graph[v].push_back(u);
}

int get_size(int u)
{
	vis[u] = true;
	int ret = 1;
	for (int i = 0; i < (int)graph[u].size(); i++) {
		int v = graph[u][i];
		if (vis[v]) continue;
		ret += get_size(v);
	}
	return ret;
}

std::vector<int> get_init()
{
	std::vector<int> ret;
	for (int i = 0; i < n; i++) {
		if (vis[i]) continue;
		ret.push_back(get_size(i));
	}
	std::sort(ret.begin(), ret.end());
	return ret;
}

int c2(int n)
{
	return n * (n - 1) / 2;
}

#ifdef DEBUG
void print(std::vector<int> const & x)
{
	std::cout << "----> ";
	for (auto i : x) std::cout << i << ' ';
	std::cout << '\n';
}
#endif

double dp(std::vector<int> const & now)
{
	//print(now);
	int len = now.size();
	if (len == 1) return 0;
	if (f.find(now) != f.end()) return f[now];
	double ret = 0, first = 0;
	for (int i = 0; i < len; i++) first += c2(now[i]);
	ret += first;
	first = c2(n) - first;

	for (int i = 0; i < len; i++)
		for (int j = i + 1; j < len; j++)
			if (i != j) {
				std::vector<int> tmp(now.begin(), now.end() - 1);
				tmp[i] += now[j];
				if (j < len - 1) tmp[j] = now[len - 1];
				std::sort(tmp.begin(), tmp.end());
				ret += (1 + dp(tmp)) * now[i] * now[j];
			}
	return f[now] = ret / first;
}

int main()
{
	std::cin >> n >> m;
	for (int i = 0, x, y; i < m; i++) {
		std::cin >> x >> y;
		add_edge(--x, --y);
	}

	std::vector<int> init = get_init();
	std::cout << std::setprecision(6) << std::fixed << dp(init) << '\n';
}

